package com.beiji.lib.pen.utils

import com.google.gson.Gson
import com.google.gson.GsonBuilder
import com.google.gson.reflect.TypeToken
import java.lang.reflect.Type


@Suppress("unused")
object GsonUtil {

    //gson = Gson()
    //当使用GsonBuilder方式时属性为空的时候输出来的json字符串是有键值key的,显示形式是"key":null，而直接new出来的就没有"key":null的
    private var gson: Gson = GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create()

    /**
     * 将对象转成json格式
     *
     * @param object
     * @return String
     */
    fun toGsonString(`object`: Any): String? {
        return gson.toJson(`object`)
    }

    /**
     * 将json转成特定的cls的对象
     *
     * @param gsonString
     * @param cls
     * @return
     */
    fun <T> stringToBean(gsonString: String, cls: Class<T>): T? {
        return gson.fromJson(gsonString, cls)
    }

    /**
     * json字符串转成list
     *
     * @param gsonString
     * @param cls
     * @return
     */
    fun <T> stringToBeanList(gsonString: String, cls: Class<T>): List<T>? {
        //根据泛型返回解析指定的类型,TypeToken<List<T>>{}.getType()获取返回类型
        return gson.fromJson(gsonString, object : TypeToken<List<T>>() {}.type)
    }

    /**
     * json字符串转成list
     *
     * @param gsonString
     * @param listType
     * @return
     */
    fun <T> stringToBeanList(gsonString: String, listType: Type): List<T>? {
        //根据泛型返回解析指定的类型,TypeToken<List<T>>{}.getType()获取返回类型
        return gson.fromJson(gsonString, listType)
    }

//    /**
//     * json字符串转成list中有map的
//     *
//     * @param gsonString
//     * @return
//     */
//    fun <T> GsonToListMaps(gsonString: String): List<Map<String, T>>? {
//        return gson.fromJson<List<Map<String, T>>>(gsonString,
//                object : TypeToken<List<Map<String, T>>>() {}.type)
//    }

    /**
     * json字符串转成map的
     *
     * @param gsonString
     * @return
     */
    fun <T> stringToMap(gsonString: String): Map<String, T>? {
        return gson.fromJson<Map<String, T>>(gsonString, object : TypeToken<Map<String, T>>() {}.type)
    }
}
